home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / DEMONSTR / VLIB20.ZIP / DEMOPROC.C < prev    next >
C/C++ Source or Header  |  1993-09-13  |  40KB  |  1,470 lines

  1. /****************************************************************************
  2.  
  3.     PROGRAM:    Vlibdemo.exe
  4.  
  5.     PURPOSE:    To demonstrate the usage of Visualib(TM) functions.
  6.     
  7.     PROVIDER:   Visual Technology, Co.
  8.                 P.O.Box 901-413
  9.                 Kansas City, MO 64190
  10.                 Tel. (219) 289-0235
  11.                 Fax. (816) 746-6618
  12.     
  13.     DATE:        May, 1993
  14.  
  15. ****************************************************************************/
  16.  
  17. #include <windows.h>
  18. #include <stdlib.h>
  19. #include <math.h>
  20. #include "visualib.h"
  21. #include "menu.h"
  22. #include "vlibdemo.h"
  23. #include "demoproc.h"
  24.  
  25. HINSTANCE    hdllinst = 0;
  26.  
  27. int WINAPI LibMain (HINSTANCE hinst, WORD wDataSeg, WORD cbHeapSize, LPSTR lpszCmdLine)
  28. {
  29.     if (cbHeapSize != 0)
  30.         UnlockData (0);
  31.     hdllinst = hinst;
  32.     return (1);
  33. }
  34.  
  35. VOID WINAPI MinRoutine (int nParameter, LPSTR lpszParam2)
  36. {
  37.     
  38. }
  39.  
  40. int    WINAPI WEP (int nParameter)
  41. {
  42.     if (nParameter == WEP_SYSTEM_EXIT) {
  43.         return (1);
  44.     }
  45.     else if (nParameter == WEP_FREE_DLL) {
  46.         return (1);
  47.     }
  48.     else {
  49.         return (1);
  50.     }
  51. }
  52.  
  53. VOIDED    Prime2D (HDC hdc, int func)
  54. {
  55.     short    i;
  56.     double    x, y, a;
  57.  
  58.     PenColor (hdc, VL_WHITE);
  59.     DisplayViewerFrame (hdc, VL_CURRENT);
  60.     switch (func) {
  61.         case IDM_2DPRIME_LINE:
  62.             SetViewerName (VL_CURRENT, "2D Lines");
  63.             PenColor (hdc, VL_RED);
  64.             MoveTo2D (hdc, 0, 0);
  65.             LineTo2D (hdc, 1, 1);
  66.             RLineTo2D (hdc, -2, 0);
  67.             RLineTo2D (hdc, 0, -2);
  68.             RLineTo2D (hdc, 2, 0);
  69.             RLineTo2D (hdc, 0, 2);
  70.             RMoveTo2D (hdc, 1, 1);
  71.             LineTo2D (hdc, -2, 2);
  72.             PenColor (hdc, VL_BLUE);
  73.             MoveTo2H (hdc, 1, 1, 0.5f);
  74.             LineTo2H (hdc, 0, 1, 0);
  75.             LineTo2H (hdc, 0, 0, 1);
  76.             MoveTo2H (hdc, -1, 1, 0.5f);
  77.             LineTo2H (hdc, -1, 0, 0);
  78.             LineTo2H (hdc, 0, 0, 1);
  79.             MoveTo2H (hdc, -1, -1, 0.5f);
  80.             LineTo2H (hdc, 0, -1, 0);
  81.             LineTo2H (hdc, 0, 0, 1);
  82.             MoveTo2H (hdc, 1, -1, 0.5f);
  83.             LineTo2H (hdc, 1, 0, 0);
  84.             LineTo2H (hdc, 0, 0, 1);
  85.             PenColor (hdc, VL_GREEN);
  86.             Line2D (hdc, -15, 5, 15, 5);
  87.             Line2D (hdc, -15, -5, 15, -5);
  88.             Line2D (hdc, -5, -15, -5, 15);
  89.             Line2D (hdc, 5, -15, 5, 15);
  90.             Line2D (hdc, -15, 0, 0, 15);
  91.             Line2D (hdc, 15, 0, 0, 15);
  92.             Line2D (hdc, 0, -15, 15, 0);
  93.             Line2D (hdc, 0, -15, -15, 0);
  94.             PenColor (hdc, VL_YELLOW);
  95.             Line2H (hdc, -5, 5, 0.75f, 5, 5, 0.75f);
  96.             Line2H (hdc, -5, -5, 0.75f, 5, -5, 0.75f);
  97.             Line2H (hdc, -5, -5, 0.75f, -5, 5, 0.75f);
  98.             Line2H (hdc, 5, -5, 0.75f, 5, 5, 0.75f);
  99.             PenColor (hdc, VL_BROWN);
  100.             RLine2D (hdc, 2, 3, -5, -5);
  101.             break;
  102.         case IDM_2DPRIME_POLYLINE:
  103.         {
  104.             COORD    poly[] = {-1, -1, -1, 1, 1, 1, 1, -1};
  105.  
  106.             SetViewerName (VL_CURRENT, "2D PolyLines");
  107.             PenColor (hdc, VL_RED);
  108.             Polyline2D (hdc, VL_2D, poly, 4);
  109.             PushTransformation2D (NULL);
  110.             TranslateTo2D (3, 3);
  111.             ClosedPolyline2D (hdc, VL_2D, poly, 4);
  112.             TranslateTo2D (10, 0);
  113.             ClosedPolyline2D (hdc, VL_2D, poly, 4);
  114.             TranslateTo2D (10, -6);
  115.             ClosedPolyline2D (hdc, VL_2D, poly, 4);
  116.             TranslateTo2D (-10, -6);
  117.             ClosedPolyline2D (hdc, VL_2D, poly, 4);
  118.             TranslateTo2D (-10, 6);
  119.             ClosedPolyline2D (hdc, VL_2D, poly, 4);
  120.             PopTransformation2D (NULL);
  121.             LineTo2D (hdc, 0, 0);
  122.             break;
  123.         }
  124.         case IDM_2DPRIME_POINTER:
  125.             SetViewerName (VL_CURRENT, "2D Pointers");
  126.             PenColor (hdc, VL_YELLOW);
  127.             for (i = 0, a = 0; i < 12; i++, a += 0.5f) {
  128.                 x = 9 * cos (a);
  129.                 y = 5 * sin (a);
  130.                 Pointer2D (hdc, 0, 0, (real) x, (real) y, 1, 0.5f, VL_CLOSEDARROW);
  131.             }
  132.             break;
  133.  
  134.         case IDM_2DPRIME_MARK:
  135.             SetViewerName (VL_CURRENT, "2D Marks");
  136.             PenColor (hdc, VL_BLUE);
  137.             x = -9;
  138.             y = -6;
  139.             for (i = 0; i < 10; i++) {
  140.                 Mark2D (hdc, (real) x, (real) y, i+2, i+2, VL_CIRCLEMARK);
  141.                 x += 2;
  142.             }
  143.             x = -9;
  144.             y = -4;
  145.             for (i = 0; i < 10; i++) {
  146.                 Mark2D (hdc, (real) x, (real) y, i+2, i+2, VL_CROSSMARK);
  147.                 x += 2;
  148.             }
  149.             x = -9;
  150.             y = -2;
  151.             for (i = 0; i < 10; i++) {
  152.                 Mark2D (hdc, (real) x, (real) y, i+2, i+2, VL_XMARK);
  153.                 x += 2;
  154.             }
  155.             x = -9;
  156.             y = 0;
  157.             for (i = 0; i < 10; i++) {
  158.                 Mark2D (hdc, (real) x, (real) y, i+2, i+2, VL_TRIANGLEMARK);
  159.                 x += 2;
  160.             }
  161.             x = -9;
  162.             y = 2;
  163.             for (i = 0; i < 10; i++) {
  164.                 Mark2D (hdc, (real) x, (real) y, i+2, i+2, VL_BOXMARK);
  165.                 x += 2;
  166.             }
  167.             x = -9;
  168.             y = 4;
  169.             for (i = 0; i < 10; i++) {
  170.                 Mark2D (hdc, (real) x, (real) y, i+2, i+2, VL_DIAMONDMARK);
  171.                 x += 2;
  172.             }
  173.             x = -9;
  174.             y = 6;
  175.             for (i = 0; i < 10; i++) {
  176.                 Mark2D (hdc, (real) x, (real) y, i+2, i+2, VL_HEXAGONMARK);
  177.                 x += 2;
  178.             }
  179.             break;
  180.  
  181.         case IDM_2DPRIME_LABEL:
  182.             SetViewerName (VL_CURRENT, "2D Labels");
  183.             TextColor (hdc, VL_RED, VL_WHITE, OPAQUE);
  184.             PenColor (hdc, VL_GREEN);
  185.             SetTextAlign (hdc, TA_CENTER | TA_BASELINE);
  186.             Label2D (hdc, 0, 0, "Center & BaseLine");
  187.             Mark2D (hdc, 0, 0, 15, 5, VL_CROSSMARK);
  188.             SetTextAlign (hdc, TA_CENTER | TA_TOP);
  189.             Label2D (hdc, 0, 3, "Center & Top");
  190.             Mark2D (hdc, 0, 3, 15, 3, VL_CROSSMARK);
  191.             SetTextAlign (hdc, TA_CENTER | TA_BOTTOM);
  192.             Label2D (hdc, 0, -3, "Center & Bottom");
  193.             Mark2D (hdc, 0, -3, 15, 3, VL_CROSSMARK);
  194.  
  195.             SetTextAlign (hdc, TA_LEFT | TA_BASELINE);
  196.             Label2D (hdc, 3.5f, 0, "Left & BaseLine");
  197.             Mark2D (hdc, 3.5f, 0, 15, 5, VL_CROSSMARK);
  198.             SetTextAlign (hdc, TA_LEFT | TA_TOP);
  199.             Label2D (hdc, 3.5f, 3, "Left & Top");
  200.             Mark2D (hdc, 3.5f, 3, 15, 3, VL_CROSSMARK);
  201.             SetTextAlign (hdc, TA_LEFT | TA_BOTTOM);
  202.             Label2D (hdc, 3.5f, -3, "Left & Bottom");
  203.             Mark2D (hdc, 3.5f, -3, 15, 3, VL_CROSSMARK);
  204.  
  205.             SetTextAlign (hdc, TA_RIGHT | TA_BASELINE);
  206.             Label2D (hdc, -3.5f, 0, "Right & BaseLine");
  207.             Mark2D (hdc, -3.5f, 0, 15, 5, VL_CROSSMARK);
  208.             SetTextAlign (hdc, TA_RIGHT | TA_TOP);
  209.             Label2D (hdc, -3.5f, 3, "Right & Top");
  210.             Mark2D (hdc, -3.5f, 3, 15, 3, VL_CROSSMARK);
  211.             SetTextAlign (hdc, TA_RIGHT | TA_BOTTOM);
  212.             Label2D (hdc, -3.5f, -3, "Right & Bottom");
  213.             Mark2D (hdc, -3.5f, -3, 15, 3, VL_CROSSMARK);
  214.             break;
  215.         case IDM_2DPRIME_ARROW:
  216.             SetViewerName (VL_CURRENT, "3D Arrows");
  217.             break;
  218.         case IDM_2DPRIME_NET:
  219.         {
  220.             COORD    net[140];
  221.             short    i, j, index = 0;
  222.             real    x, y;
  223.             
  224.             PenColor (hdc, VL_BLUE);
  225.             y = -6.5f;
  226.             for (i = 0; i < 7; i++) {
  227.                 x = -9.5f;
  228.                 for (j = 0; j < 10; j++) {
  229.                     net[index++] = x + ((real) rand () / RAND_MAX);
  230.                     net[index++] = y + ((real) rand () / RAND_MAX);
  231.                     x += 2;
  232.                 }
  233.                 y += 2;
  234.             }
  235.             Net2D (hdc, VL_2D, (LPCOORD) net, 7, 10);
  236.             SetViewerName (VL_CURRENT, "2D Net");
  237.             break;
  238.         }
  239.     }
  240.     TextColor (hdc, VL_BLUE, VL_BLACK, TRANSPARENT);
  241.     DisplayViewerName (hdc, VL_CURRENT, FALSE);
  242. }
  243.  
  244. VOIDED    Prime3D (HDC hdc, int func)
  245. {
  246.     PenColor (hdc, VL_WHITE);
  247.     DisplayViewerFrame (hdc, VL_CURRENT);
  248.     MarkPosition3D (hdc, 0, 0, 0, 10, VL_ORIGIN);
  249.     switch (func) {
  250.         case IDM_3DPRIME_LINE:
  251.             SetViewerName (VL_CURRENT, "3D Lines");
  252.             PenColor (hdc, VL_RED);
  253.             MoveTo3D (hdc, 0, 0, 0);
  254.             LineTo3D (hdc, 10, 10, 0);
  255.             RLineTo3D (hdc, 0, -20, 0);
  256.             RLineTo3D (hdc, -20, 0, 0);
  257.             RLineTo3D (hdc, 0, 20, 0);
  258.             RLineTo3D (hdc, 20, 0, 0);
  259.             PenColor (hdc, VL_BLUE);
  260.             MoveTo3H (hdc, 1, 1, 0, 0.5f);
  261.             LineTo3H (hdc, 0, 1, 0, 0);
  262.             LineTo3H (hdc, 0, 0, 0, 1);
  263.             MoveTo3H (hdc, -1, 1, 0, 0.5f);
  264.             LineTo3H (hdc, -1, 0, 0, 0);
  265.             LineTo3H (hdc, 0, 0, 0, 1);
  266.             MoveTo3H (hdc, -1, -1, 0, 0.5f);
  267.             LineTo3H (hdc, 0, -1, 0, 0);
  268.             LineTo3H (hdc, 0, 0, 0, 1);
  269.             MoveTo3H (hdc, 1, -1, 0, 0.5f);
  270.             LineTo3H (hdc, 1, 0, 0, 0);
  271.             LineTo3H (hdc, 0, 0, 0, 1);
  272.             PenColor (hdc, VL_YELLOW);
  273.             MoveTo3D (hdc, 100, 100, 90);
  274.             LineTo3D (hdc, 10, 0, 0);
  275.             MoveTo3D (hdc, 100, 100, 90);
  276.             LineTo3D (hdc, 0, 10, 0);
  277.             MoveTo3D (hdc, 100, 100, 90);
  278.             LineTo3D (hdc, 0, 0, 10);
  279.             break;
  280.         case IDM_3DPRIME_POLYLINE:
  281.         {
  282.             COORD    poly[] = {-1, -1, -1, 1, 1, 1, 1, -1};
  283.  
  284.             SetViewerName (VL_CURRENT, "3D PolyLines");
  285.             PenColor (hdc, VL_RED);
  286.             Polyline3D (hdc, VL_2D, poly, 4);
  287.             PushTransformation3D (NULL);
  288.             Scale3D (5, 5, 5);
  289.             TranslateTo3D (3, 3, 0);
  290.             PenColor (hdc, VL_GREEN);
  291.             ClosedPolyline3D (hdc, VL_2D, poly, 4);
  292.             TranslateTo3D (10, 0, 0);
  293.             PenColor (hdc, VL_BLUE);
  294.             ClosedPolyline3D (hdc, VL_2D, poly, 4);
  295.             Translate